#include "link_list.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "log_record.h"

// 顺序访问的方式获取名字
int get_sequence_name(const char *soft_install_path, const char *cur_name_list_file, char *buff, node_t *phead){
    // 组装路径和文件名  "sequence_access_position"
    char pathname[256] = {0};
    sprintf(pathname, "%s/log/sequence_access_position", soft_install_path);
    // 打开 记录上次点名信息的 文件
    FILE *fp = fopen(pathname, "r");
    if(NULL == fp){
        printf("日志文件打开失败\n");
        exit(EXIT_FAILURE);
    }
    // 读取文件内容
    node_t *ptemp = NULL;
    char temp_buff[128] = {0};
    char last_name[32] = {0};
    if(NULL == fgets(temp_buff, sizeof(temp_buff), fp)){
        // 如果 fgets 直接返回 NULL 说明是第一次使用 空的
        strcpy(buff, phead->next->name);
    }else{
        // 否则说明已经使用过了  本次读到的就是 上次点名使用的名单
        temp_buff[strlen(temp_buff)-1] = '\0';
        // 判断是否是当前使用的名单 
        if(!strcmp(cur_name_list_file, temp_buff)){
            // 如果是当前名单
            // 再fgets读取下一行的内容 (名字)
            fgets(last_name, sizeof(last_name), fp);
            if('\n' == last_name[strlen(last_name)-1]){
                last_name[strlen(last_name)-1] = '\0';
            }
            // 遍历链表找到 该名字对应的节点 
            ptemp = phead->next;
            while(NULL != ptemp->next && strcmp(ptemp->name, last_name)){
                ptemp = ptemp->next;
            }
            // 判断是否是最后一个节点
            if(NULL != ptemp->next){
                // 如果不是 就将 下一节点的数据域放在 buff中
                strcpy(buff, ptemp->next->name);
            }else{
                // 如果是 就将 phead->next 的数据域放在 buff中
                strcpy(buff, phead->next->name);
            }
        }else{
            // 如果不是当前名单
            // 就将 phead->next 的数据域放在 buff中
            strcpy(buff, phead->next->name);
        }
    }
    fclose(fp);
    // 重新记录 sequence_access_position 日志
    write_where_log(soft_install_path, cur_name_list_file, buff);

    return 0;
}